package com.seafood.service;

import com.seafood.dto.SendSmsRequestDTO;
import com.seafood.dto.SmsVerificationCodeDTO;
import com.seafood.dto.VerifySmsCodeRequestDTO;

import java.util.List;
import java.util.Map;

/**
 * 短信验证码服务接口
 */
public interface SmsVerificationCodeService {
    
    /**
     * 发送短信验证码
     */
    SmsVerificationCodeDTO sendVerificationCode(SendSmsRequestDTO requestDTO, String ipAddress, String userAgent);
    
    /**
     * 验证短信验证码
     */
    boolean verifyCode(VerifySmsCodeRequestDTO requestDTO, String ipAddress);
    
    /**
     * 验证并标记为已使用
     */
    boolean verifyAndUseCode(VerifySmsCodeRequestDTO requestDTO, String ipAddress);
    
    /**
     * 根据手机号和类型获取最新验证码
     */
    SmsVerificationCodeDTO getLatestCodeByPhoneAndType(String phone, String codeType);
    
    /**
     * 检查验证码发送频率限制
     */
    boolean checkSendFrequency(String phone, String codeType, String ipAddress);
    
    /**
     * 获取验证码发送历史
     */
    List<SmsVerificationCodeDTO> getSendHistory(String phone, int limit);
    
    /**
     * 清理过期验证码
     */
    void cleanupExpiredCodes();
    
    /**
     * 获取发送统计信息
     */
    Map<String, Object> getSendStatistics(String startDate, String endDate);
    
    /**
     * 获取频繁发送用户列表
     */
    List<Map<String, Object>> getFrequentSenders(int days, int threshold);
    
    /**
     * 重新发送验证码
     */
    SmsVerificationCodeDTO resendVerificationCode(String phone, String codeType, String ipAddress, String userAgent);
}